home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE6h.s < prev    next >
Text File  |  1994-07-11  |  10KB  |  256 lines

  1.  
  2. ; Lezione6h.s    STAMPIAMO VARIE RIGHE DI TESTO * A 3 COLORI * ATTIVANDO IL
  3. ;        SECONDO BITPLANE, SU CUI SCRIVIAMO IL TESTO2.
  4.  
  5.     SECTION    CiriCop,CODE
  6.  
  7. Inizio:
  8.     move.l    4.w,a6        ; Execbase in a6
  9.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  10.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  11.     jsr    -$198(a6)    ; OpenLibrary
  12.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  13.     move.l    d0,a6
  14.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  15.  
  16. ;     PUNTIAMO I NOSTRI BITPLANE
  17.  
  18.     MOVE.L    #BITPLANE,d0    ; in d0 mettiamo l'indirizzo del bitplane1
  19.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  20.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  21.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  22.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  23.  
  24.     MOVE.L    #BITPLANE2,d0    ; in d0 mettiamo l'indirizzo del bitplane 2
  25.     LEA    BPLPOINTERS2,A1    ; puntatori nella COPPERLIST
  26.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  27.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  28.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  29.  
  30.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  31.     move.w    d0,$dff088        ; Facciamo partire la COP
  32.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  33.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  34.  
  35.     LEA    TESTO(PC),A0    ; Indirizzo del testo da stampare in a0
  36.     LEA    BITPLANE,A3    ; Indirizzo del bitplane destinazione in a3
  37.     bsr.w    print        ; Stampa le linee di testo sullo schermo
  38.  
  39.     LEA    TESTO2(PC),A0    ; Indirizzo del testo da stampare in a0
  40.     LEA    BITPLANE2,A3    ; Indirizzo del bitplane destinazione in a3
  41.     bsr.w    print        ; Stampa le linee di testo sullo schermo
  42.  
  43. mouse:
  44.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  45.     bne.s    mouse        ; se no, torna a mouse:
  46.  
  47.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  48.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  49.  
  50.     move.l    4.w,a6
  51.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  52.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  53.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  54.     rts            ; USCITA DAL PROGRAMMA
  55.  
  56. ;    Dati
  57.  
  58. GfxName:
  59.     dc.b    "graphics.library",0,0
  60.  
  61. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  62.     dc.l    0    ; della graphics.library
  63.  
  64. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  65.     dc.l    0
  66.  
  67. ;    Routine che stampa caratteri larghi 8x8 pixel
  68.  
  69. PRINT:
  70.     MOVEQ    #23-1,D3    ; NUMERO RIGHE DA STAMPARE: 23
  71. PRINTRIGA:
  72.     MOVEQ    #40-1,D0    ; NUMERO COLONNE PER RIGA: 40
  73. PRINTCHAR2:
  74.     MOVEQ    #0,D2        ; Pulisci d2
  75.     MOVE.B    (A0)+,D2    ; Prossimo carattere in d2
  76.     SUB.B    #$20,D2        ; TOGLI 32 AL VALORE ASCII DEL CARATTERE, IN
  77.                 ; MODO DA TRASFORMARE, AD ESEMPIO, QUELLO
  78.                 ; DELLO SPAZIO (che e' $20), in $00, quello
  79.                 ; DELL'ASTERISCO ($21), in $01...
  80.     MULU.W    #8,D2        ; MOLTIPLICA PER 8 IL NUMERO PRECEDENTE,
  81.                 ; essendo i caratteri alti 8 pixel
  82.     MOVE.L    D2,A2
  83.     ADD.L    #FONT,A2    ; TROVA IL CARATTERE DESIDERATO NEL FONT...
  84.  
  85.                 ; STAMPIAMO IL CARATTERE LINEA PER LINEA
  86.     MOVE.B    (A2)+,(A3)    ; stampa LA LINEA 1 del carattere
  87.     MOVE.B    (A2)+,40(A3)    ; stampa LA LINEA 2  " "
  88.     MOVE.B    (A2)+,40*2(A3)    ; stampa LA LINEA 3  " "
  89.     MOVE.B    (A2)+,40*3(A3)    ; stampa LA LINEA 4  " "
  90.     MOVE.B    (A2)+,40*4(A3)    ; stampa LA LINEA 5  " "
  91.     MOVE.B    (A2)+,40*5(A3)    ; stampa LA LINEA 6  " "
  92.     MOVE.B    (A2)+,40*6(A3)    ; stampa LA LINEA 7  " "
  93.     MOVE.B    (A2)+,40*7(A3)    ; stampa LA LINEA 8  " "
  94.  
  95.     ADDQ.w    #1,A3        ; A1+1, avanziamo di 8 bit (PROSSIMO CARATTERE)
  96.  
  97.     DBRA    D0,PRINTCHAR2    ; STAMPIAMO D0 (40) CARATTERI PER RIGA
  98.  
  99.     ADD.W    #40*7,A3    ; ANDIAMO A CAPO
  100.  
  101.     DBRA    D3,PRINTRIGA    ; FACCIAMO D3 RIGHE
  102.  
  103.     RTS
  104.  
  105.  
  106.         ; numero caratteri per linea: 40
  107. TESTO:         ;          1111111111222222222233333333334
  108.          ;     1234567890123456789012345678901234567890
  109.     dc.b    '   PRIMA RIGA (solo in testo1)          ' ; 1
  110.     dc.b    '                                        ' ; 2
  111.     dc.b    '     /\  /                              ' ; 3
  112.     dc.b    '    /  \/                               ' ; 4
  113.     dc.b    '                                        ' ; 5
  114.     dc.b    '        SESTA RIGA (entrambi i bitplane)' ; 6
  115.     dc.b    '                                        ' ; 7
  116.     dc.b    '                                        ' ; 8
  117.     dc.b    'FABIO CIUCCI               INTERNATIONAL' ; 9
  118.     dc.b    '                                        ' ; 10
  119.     dc.b    '   1  4 6 89  !@ $ ^& () +| =- ]{       ' ; 11
  120.     dc.b    '                                        ' ; 12
  121.     dc.b    '     LA  A I G N T C  OBLITERAZIONE     ' ; 15
  122.     dc.b    '                                        ' ; 25
  123.     dc.b    '                                        ' ; 16
  124.     dc.b    '  Nel mezzo del cammin di nostra vita   ' ; 17
  125.     dc.b    '                                        ' ; 18
  126.     dc.b    '    Mi RitRoVaI pEr UnA sELva oScuRa    ' ; 19
  127.     dc.b    '                                        ' ; 20
  128.     dc.b    '    CHE LA DIRITTA VIA ERA              ' ; 21
  129.     dc.b    '                                        ' ; 22
  130.     dc.b    '  AHI Quanto a DIR QUAL ERA...          ' ; 23
  131.     dc.b    '                                        ' ; 24
  132.     dc.b    '                                        ' ; 25
  133.     dc.b    '                                        ' ; 26
  134.     dc.b    '                                        ' ; 27
  135.  
  136.     EVEN
  137.  
  138.         ; numero caratteri per linea: 40
  139. TESTO2:         ;          1111111111222222222233333333334
  140.          ;     1234567890123456789012345678901234567890
  141.     dc.b    '                                        ' ; 1
  142.     dc.b    '  SECONDA RIGA (solo in testo2)         ' ; 2
  143.     dc.b    '     /\  /                              ' ; 3
  144.     dc.b    '    /  \/                               ' ; 4
  145.     dc.b    '                                        ' ; 5
  146.     dc.b    '        SESTA RIGA (entrambi i bitplane)' ; 6
  147.     dc.b    '                                        ' ; 7
  148.     dc.b    '                                        ' ; 8
  149.     dc.b    'FABIO        COMMUNICATION INTERNATIONAL' ; 9
  150.     dc.b    '                                        ' ; 10
  151.     dc.b    '   1234567 90  @#$%^&*( _+|\=-[]{}      ' ; 11
  152.     dc.b    '                                        ' ; 12
  153.     dc.b    '     LA PALINGENETICA  B I E A I N      ' ; 15
  154.     dc.b    '                                        ' ; 25
  155.     dc.b    '                                        ' ; 16
  156.     dc.b    '  Nel       del cammin di        vita   ' ; 17
  157.     dc.b    '                                        ' ; 18
  158.     dc.b    '    Mi          pEr UnA       oScuRa    ' ; 19
  159.     dc.b    '                                        ' ; 20
  160.     dc.b    '    CHE LA         VIA ERA SMARRITA     ' ; 21
  161.     dc.b    '                                        ' ; 22
  162.     dc.b    '  AHI Quanto a     QUAL ERA...          ' ; 23
  163.     dc.b    '                                        ' ; 24
  164.     dc.b    '                                        ' ; 25
  165.     dc.b    '                                        ' ; 26
  166.     dc.b    '                                        ' ; 27
  167.  
  168.     EVEN
  169.  
  170.  
  171.  
  172.     SECTION    GRAPHIC,DATA_C
  173.  
  174. COPPERLIST:
  175.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  176.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  177.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  178.     dc.w    $13e,$0000
  179.  
  180.     dc.w    $8E,$2c81    ; DiwStrt
  181.     dc.w    $90,$2cc1    ; DiwStop
  182.     dc.w    $92,$0038    ; DdfStart
  183.     dc.w    $94,$00d0    ; DdfStop
  184.     dc.w    $102,0        ; BplCon1
  185.     dc.w    $104,0        ; BplCon2
  186.     dc.w    $108,0        ; Bpl1Mod
  187.     dc.w    $10a,0        ; Bpl2Mod
  188.             ; 5432109876543210
  189.     dc.w    $100,%0010001000000000    ; 2 bitplane LOWRES 320x256
  190.  
  191. BPLPOINTERS:
  192.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  193. BPLPOINTERS2:
  194.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane
  195.  
  196.     dc.w    $0180,$000    ; color0 - SFONDO
  197.     dc.w    $0182,$19a    ; color1 - SCRITTE primo bitplane
  198.     dc.w    $0184,$f62    ; color2 - SCRITTE secondo bitplane
  199.     dc.w    $0186,$1e4    ; color3 - SCRITTE primo+secondo bitplane
  200.  
  201.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  202.  
  203. ;    Il FONT caratteri 8x8
  204.  
  205. FONT:
  206. ;    incbin    "metal.fnt"    ; Carattere largo
  207. ;    incbin    "normal.fnt"    ; Simile ai caratteri kickstart 1.3
  208.     incbin    "nice.fnt"    ; Carattere stretto
  209.  
  210.     SECTION    MIOPLANE,BSS_C    ; In CHIP
  211.  
  212. BITPLANE:
  213.     ds.b    40*256    ; un bitplane lowres 320x256
  214. BITPLANE2:
  215.     ds.b    40*256    ; un bitplane lowres 320x256
  216.  
  217.     end
  218.  
  219. Per fare il testo a 3 colori (4 con lo sfondo) e' bastato attivare un altro
  220. bitplane e stamparci il testo2, modificato in modo che manchino delle parole
  221. per creare colori diversi nella sovrapposizione. Anche facendo "mancare" delle
  222. parole al testo del primo bitplane si cambia il colore, infatti rimane solo il
  223. secondo bitplane. Per stampare entrambi i testi si usa la stessa routine print,
  224. ma c'e' una piccola modifica: le prime due istruzioni, che prelevano gli
  225. indirizzi del testo da stampare e del bitplane destinazione sono state tolte,
  226. in modo da rendere la routine utilizzabile per stampare qualsiasi testo
  227. preventivamente caricato in a0 nel bitplane preventivamente caricato in a3:
  228.  
  229.  
  230.     LEA    TESTO(PC),A0    ; Indirizzo del testo da stampare in a0
  231.     LEA    BITPLANE,A3    ; Indirizzo del bitplane destinazione in a3
  232.     bsr.w    print        ; Stampa le linee di testo sullo schermo
  233.  
  234.     LEA    TESTO2(PC),A0    ; Indirizzo del testo da stampare in a0
  235.     LEA    BITPLANE2,A3    ; Indirizzo del bitplane destinazione in a3
  236.     bsr.w    print        ; Stampa le linee di testo sullo schermo
  237.  
  238. In questo modo la routine print puo' essere utilizzata per stampare qualsiasi
  239. testo su qualsiasi bitplane, e non sempre TESTO: in BITPLANE:!
  240. Al primo "bsr.w print" stampa come nei listati precedenti, al secondo bsr.w
  241. invece stampa il TESTO2: nel BITPLANE2:.
  242. Dalla sovrapposizione dei 2 bitplane, a seconda che il carattere sia solo nel
  243. primo bitplane, o sia solo nel secondo, o sia in entrambi, viene visualizzato
  244. uno dei 3 colori (il quarto e' lo sfondo)
  245.  
  246.     dc.w    $0180,$000    ; color0 - SFONDO
  247.     dc.w    $0182,$19a    ; color1 - SCRITTE primo bitplane (BLU)
  248.     dc.w    $0184,$f62    ; color2 - SCRITTE secondo bitplane (ARANCIO)
  249.     dc.w    $0186,$1e4    ; color3 - SCRITTE primo+secondo bitpl. (VERDE)
  250.  
  251. Per vedere meglio la situazione dei 2 biplane provate a spostare in alto il
  252. secondo bitplane di 5 pixel:
  253.  
  254.     MOVE.L    #BITPLANE2+(40*5),d0
  255.  
  256.